﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using TI_4_Limonade_Fabriek.Database;
using TI_4_Limonade_Fabriek.Logging;
using TI_4_Limonade_Fabriek.Model;

namespace TI_4_Limonade_Fabriek
{
    public partial class BatchOverviewScreen : Form
    {
        BatchDBController bdbc;
        List<Batch> batchList;
        ErrorLogging el;
        BatchLogging bl;

        public BatchOverviewScreen()
        {
            InitializeComponent();
            bdbc = new BatchDBController();
            batchList = new List<Batch>();
            el = new ErrorLogging();
            bl = new BatchLogging();
            FillBatchList(); //hiermee wordt de batchlijst ingevuld(refreshen van batchlijst).
        }

        private void BatchOverzicht_Load(object sender, EventArgs e)
        {
            BatchOverviewRefreshTimer.Start();
        }

        private void FillBatchList()
        {
            batchList.Clear();
            batchList = bdbc.ReadBatchList();

            dgvBatchLijst.DataSource = batchList;
            RenameColumnHeaders();
        }

        private void RenameColumnHeaders()
        {
            dgvBatchLijst.Columns[0].HeaderText = "Batch ID";
            dgvBatchLijst.Columns[2].HeaderText = "Aantal Bekers";
        }

        private void btnAddBatch_Click(object sender, EventArgs e)
        {
            InsertBatchScreen biScreen = new InsertBatchScreen();
            biScreen.ShowDialog();
            if (biScreen.IsDisposed)
            {
                FillBatchList();
            }
        }

        private void btnDeleteBatch_Click(object sender, EventArgs e)
        {

            if(dgvBatchLijst.SelectedRows.Count == 1)
            {
                int BId = GetSelectedBatchId();
                Batch deleteBatch = bdbc.ReadBatch(BId);

                if (deleteBatch.Status == 0)
                {

                    DialogResult choice = MessageBox.Show("Weet u zeker dat u deze batch wilt verwijderen?", "Verwijderen",
                        MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);

                    if (choice == DialogResult.OK)
                    {
                        bdbc.DeleteBatch(deleteBatch.BId);
                        FillBatchList();
                    }
                }
                else
                {
                    if (deleteBatch.Status == 1)
                    {
                        MessageBox.Show("Deze batch kan niet verwijderd worden omdat deze momenteel uitgevoerd wordt.");
                    }
                    if (deleteBatch.Status == 2)
                    {
                        MessageBox.Show("Deze batch kan niet verwijderd worden omdat deze momenteel bewerkt wordt.");
                    }
                    
                }
            }
            else
            {
                MessageBox.Show("Graag een batch selecteren");
            }
        }

        private int GetSelectedBatchId()
        {
            int rowIndex = dgvBatchLijst.CurrentCell.RowIndex;
            return int.Parse(dgvBatchLijst.Rows[rowIndex].Cells[0].Value.ToString());
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
            this.Dispose();
        }

        private void BatchOverzicht_FormClosing(object sender, FormClosingEventArgs e)
        {
            BatchOverviewRefreshTimer.Stop();
            this.Dispose();
        }

        private void btnEditBatch_Click(object sender, EventArgs e)
        {
            if (dgvBatchLijst.SelectedRows.Count == 1)
            {
                Batch editBatch = batchList[dgvBatchLijst.CurrentCell.RowIndex];
                if (editBatch.Status == 0)
                {
                    editBatch.Status = 2;
                    bdbc.UpdateBatch(editBatch);
                    EditBatchScreen bbScreen = new EditBatchScreen(editBatch);
                    bbScreen.ShowDialog();
                    if (bbScreen.IsDisposed)
                    {

                        FillBatchList();
                    }
                }
                else if (editBatch.Status == 1)
                {
                    MessageBox.Show("Kan deze batch niet bewerken omdat deze uitgevoerd wordt.");
                }
                else if (editBatch.Status == 2)
                {
                    MessageBox.Show("Kan deze batch niet bewerken omdat deze al bewerkt wordt.");
                }
            }
            else
            {
                MessageBox.Show("Selecteer een batch.");
            }
        }

        private void BatchOverviewRefreshTimer_Tick(object sender, EventArgs e)
        {
            FillBatchList();
        }

        private void btnShowBatchLog_Click(object sender, EventArgs e)
        {
            
            bl.ShowBatchLog();
        }

        private void btnShowErrorLog_Click(object sender, EventArgs e)
        {
            el.ShowErrorLog();
        }

    }
}
